package aaa

import (
	"embed"
	"os"
	"os/signal"
	"runtime"
	"github.com/gin-gonic/gin"
	"gitee.com/mad-wud/lin"
)

var 路由_基础 func(方法名 string, 参数列表 lin.L列表,ctx *gin.Context) string
var 路由_字节集 func(方法名 string, 参数列表 lin.L列表,ctx *gin.Context) (字节集数据 []byte, err error)
var 路由_文件 func(方法名 string, 参数列表 lin.L列表,ctx *gin.Context) (响应文件路径 string, err error)
var 谷歌安装包 *embed.FS
var 路由_自由路径 func(服务端 *gin.Engine)

func C初始化环境(界面 *embed.FS, 参_谷歌安装包 *embed.FS, 路由 func(方法名 string, 参数列表 lin.L列表,ctx *gin.Context) string, 路由字节集 func(方法名 string, 参数列表 lin.L列表,ctx *gin.Context) (字节集数据 []byte, err error), 路由文件 func(方法名 string, 参数列表 lin.L列表,ctx *gin.Context) (响应文件路径 string, err error),路由_自由路径方法 func(服务端 *gin.Engine)) {
	Q_配置.ZR载入_重文件("./配置.json")
	Ws广播.C初始化()
	Ws标识.C初始化()
	界面代码 = 界面
	谷歌安装包 = 参_谷歌安装包
	路由_基础 = 路由
	路由_字节集 = 路由字节集
	路由_文件 = 路由文件
	路由_自由路径 =路由_自由路径方法
	Q_响应.C初始化()
	Q_响应.T添加方法("lindk获取服务器地址lindk", 基础响应)
	启动界面()
}
func 基础响应(参数列表 lin.L列表) string {
	if Q_是否桌面软件 {
		return F_文本.C创建文本("localhost:{1}", Q_后端服务器端口)
	} else {
		return Q_配置.QW取文本("ws地址")
	}
}
func 启动界面() {
	if Q_是否桌面软件 {
		等待 := make(chan int, 1)
		go Q启动后端服务器(&等待)
		<-等待
		if Q_主窗口.Q取谷歌浏览器地址() == "" {
			switch runtime.GOOS {
			case "darwin":
				Q_系统jie.X信息框("错误", "没有找到谷歌浏览器环境")
			case "windows":
				Q_系统jie.X信息框("错误", "没有找到谷歌浏览器环境 将自动安装")
				F_文件.Embed内存文件_释放到目录(*谷歌安装包, "guge.exe", F_文件.QX取运行目录())
				F_程序.Y运行程序("./guge.exe", false)
			default:
				Q_系统jie.X信息框("错误", "没有找到谷歌浏览器环境")
			}
			return

		}
		if Q_是否开发联动前端 {
			Q_后端基础url = F_文本.C创建文本("http://localhost:{1}/", Q_开发联动前端端口)
		} else {
			Q_后端基础url = F_文本.C创建文本("http://localhost:{1}/", Q_后端服务器端口)
		}

	}else{
		go func() {
			F_时间.YC延迟程序(200)
			 本机ip :=F_系统.H获取本机ip()
			if 本机ip != "" {
				F_系统.D打开网页(F_文本.C创建文本("http://{1}:{2}", 本机ip, Q_配置.QW取文本("端口")))
			} else {
				F_系统.D打开网页(F_文本.C创建文本("http://localhost:{1}", Q_配置.QW取文本("端口")))
			}
		}()
	}

}

func S开发监测ctrl加c退出事件() {
	监测通道 := make(chan os.Signal, 1)
	signal.Notify(监测通道, os.Interrupt)
	<-监测通道
	Q_主窗口.G关闭谷歌窗口()

}

func Q启动服务器() {
	等待 := make(chan int, 1)
	Q启动后端服务器(&等待)
	<-等待
}
